package io;

import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.charset.StandardCharsets;

/**
 * @author Huangjin
 * @version 1.0
 * describe:缓冲流写出时的缓冲区问题
 * @date 2023/3/8 11:34
 */
public class FlushDemo {
    public static void main(String[] args) throws IOException {
        /*
            通过缓冲流写出的数据会被临时存储缓冲流内部的字节数组中
            直到数组存满数据时才会真实写出一次
            通过缓冲流输出的flush（）方法会强制将缓冲流中已经缓冲的数据一次性写出

            flush（0方法是在接口Flushable中定义的
            而字节输出流的超类OutputStream实现了该接口
            这意味着所有字节输出流都具有该方法
            但是只有缓冲流真正实现了flush（）应有的功能
            其他高级流flush（）方法都是调用其他连接的流的flush（），将该动作传递下去

            实际应用中何时用缓冲流？

         */
        FileOutputStream fos = new FileOutputStream("bos.txt");
        BufferedOutputStream bos = new BufferedOutputStream(fos);
        String line = "和我在成都的街头走一走，噢噢噢噢";
        bos.write(line.getBytes(StandardCharsets.UTF_8));
        System.out.println("Ok");
        bos.flush();//冲水
        bos.close();//缓冲流
    }
}
